/**
  ******************************************************************************
  * @file    app_pid.h
  * @author  Sherlock
  * @version V0.1
  * @date    8/12/2024
  * @brief   PID handling head file.
  ******************************************************************************
  * @copy
  *
  * <h2><center>&copy; COPYRIGHT 2010 Feirui</center></h2>
  */ 



/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef  __APP_PID_H__
#define  __APP_PID_H__

#ifdef __cplusplus
 extern "C" {
#endif

/**
  * @brief GLOBALS RAM definition
  */
#ifdef   APP_GLOBALS_PID
#define  APP_EXT_PID
#else
#define  APP_EXT_PID  extern
#endif


/**
  * @brief  INCLUDE FILES.
  */


#define OSPIDFlags_Timing                         ((OS_FLAGS)DEF_BIT_00)
#define OSPIDFlags_Output                         ((OS_FLAGS)DEF_BIT_01)

#define OSPIDFlags_ALL                            (OSPIDFlags_Timing | OSPIDFlags_Output)
#define OSPIDFlags_DefaultValue                   ((OS_FLAGS)0x00000000)


typedef enum
{
  BenchWorkMode_Wait       = 0,   //待机
  BenchWorkMode_ShutOff    = 1,   //关停
  BenchWorkMode_Start      = 2,   //启动
  BenchWorkMode_AVR        = 3,   //自动电压调节
  BenchWorkMode_SyncAuto   = 4,   //自动同步（合闸）
  BenchWorkMode_SyncManual = 5,   //手动同步（合闸）
  BenchWorkMode_Async      = 6,   //解除同步（分闸）
  BenchWorkMode_PF         = 7,   //同步后，使用PF模式调节
} BenchWorkMode;
APP_EXT_PID BenchWorkMode testBenchWorkMode;   //当前工作状态


/**
  * @brief Functions
  */

/**
  * @brief  合/分闸函数
  * @param  action 合/分闸动作，0表示分闸，1表示自动合闸，2表示手动合闸
  * @return 返回状态值，1表示合/分闸动作已经启动，0表示出错（错误代码后续根据需求添加）
  */
typedef enum
{
  PIDSyncAction_Open   = 0,  //分闸
  PIDSyncAction_Auto   = 1,  //自动合闸
  PIDSyncAction_Manual = 2,  //手动合闸
} PID_SyncAction;
typedef enum
{
  PIDSyncActionResult_Error  = 0,
  PIDSyncActionResult_Action = 1,
} PID_SyncActionResult;

PID_SyncActionResult PID_GeneratorSyncSwitch(PID_SyncAction action);


/**
  * @brief  有功和功率因数调整接口
  * @param  action 合/分闸动作，0表示分闸，1表示自动合闸，2表示手动合闸
  * @return 返回状态值，1表示合/分闸动作已经启动，0表示出错（错误代码后续根据需求添加）
  */
typedef enum
{
  PIDAdjustAction_Adjust,   //增加或减少
  PIDAdjustAction_Set,      //设定值
} PID_AdjustAction;
uint8_t PID_AdjustPowerInterface(PID_AdjustAction action, float powerValue);
uint8_t PID_AdjustPFInterface(PID_AdjustAction action, float PFValue);



#ifdef __cplusplus
}
#endif

#endif   /*  __APP_PID_H__  */

/******************* (C) COPYRIGHT 2010 Feirui *****END OF FILE****/